"""
外部平台适配器基类
定义统一的接口供各个提供商实现
"""
from abc import ABC, abstractmethod
from typing import Dict, Any, Optional
from loguru import logger


class ProviderBase(ABC):
    """提供商基类"""
    
    def __init__(self, config: Dict[str, Any]):
        """
        初始化提供商
        
        Args:
            config: 提供商配置字典
        """
        self.config = config
        self.name_str = self.__class__.__name__
    
    @abstractmethod
    def name(self) -> str:
        """
        返回提供商名称
        
        Returns:
            提供商名称字符串
        """
        pass
    
    @abstractmethod
    def submit(self, payload: Dict[str, Any]) -> str:
        """
        提交任务到外部平台
        
        Args:
            payload: 任务负载
            
        Returns:
            外部任务ID（externalJobId）
            
        Raises:
            Exception: 提交失败时抛出异常
        """
        pass
    
    @abstractmethod
    def poll(self, external_job_id: str) -> Dict[str, Any]:
        """
        轮询任务状态
        
        Args:
            external_job_id: 外部任务ID
            
        Returns:
            状态字典，包含：
            - status: "pending"|"running"|"succeeded"|"failed"
            - result_url: 结果URL（成功时）
            - error: 错误信息（失败时）
            
        Raises:
            Exception: 轮询失败时抛出异常
        """
        pass
    
    def validate_config(self) -> bool:
        """
        验证配置是否有效
        
        Returns:
            是否有效
        """
        return True

